#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 10   // 数据最大长度
#define DATA_TYPE int // 数据类型

typedef struct sqlist
{
    int len;
    DATA_TYPE arr[MAX_SIZE];
} sqlist;

// 创建一个空表
int Create_sqlist(sqlist *L);

// 尾部添加一个数据
int tail_insert_data_tolist(DATA_TYPE data, sqlist *L);
// 中间指定位置插入一个数据  失败 ：返回-1   成功：返回0
int pos_insert_data_tolist(DATA_TYPE data, sqlist *L, int pos);
// 删除一个数据
int pos_delet_data_fromlist(DATA_TYPE data, sqlist *L);
// 遍历
int show_list(sqlist *L);
// 修改一个数据
// 查找一个数据
// 排序  等等

int main(void)
{

    sqlist list;
    // 创建一个顺序表
    Create_sqlist(&list);
    // 插入数据
    tail_insert_data_tolist(1, &list);
    tail_insert_data_tolist(2, &list);
    tail_insert_data_tolist(3, &list);
    tail_insert_data_tolist(4, &list);
    // 遍历
    show_list(&list);
    pos_insert_data_tolist(5, &list, 2);
    // 遍历
    show_list(&list);
    pos_delet_data_fromlist(3, &list);
    show_list(&list);

    return 0;
}

//创建一个空表
int Create_sqlist(sqlist *L)
{
    //表长为0
    L->len=0;
    memset(L->arr,0,sizeof(L->arr));
    return 0;
}
//尾部添加一个数据  失败 ：返回-1   成功：返回0
int tail_insert_data_tolist(DATA_TYPE data,sqlist *L)
{

    //如果表已经满了  就不能插入了
    if(L->len>=MAX_SIZE)
    {
        printf("list is full\n");
        return -1;
    }
    L->arr[L->len]=data;
    L->len++;
    return 0;
}
//中间指定位置插入一个数据  失败 ：返回-1   成功：返回0
int pos_insert_data_tolist(DATA_TYPE data,sqlist *L,int pos)
{
    if(L->len==0)
    {
        printf("list is null\n");
        return -1;
    }
    if(L->len>=MAX_SIZE)
    {
        printf("list is full\n");
        return -1;
    }
    //对pos要进行判断
    if(pos<0||pos>L->len||pos>=MAX_SIZE)
    {
        printf("pos is error\r\n");
        return -1;
    }
    int i;  //先找到要插入数据的位置
    //先将pos后面的数据往后移动
    for(i=L->len;i>pos;i--)
    {
        L->arr[i]=L->arr[i-1];
    }
    //将插入的数据放入pos的位置
    L->arr[pos]=data;
    L->len++;//数据长度+1
    return 0;
}
//删除一个数据
//遍历
int show_list(sqlist *L)
{
    if(L->len==0)
    {
        printf("list is null\n");
        return -1;
    }
    if(L->len>=MAX_SIZE)
    {
        printf("list is full\n");
        return -1;
    }
    printf("show list data:\n");
    for(int i=0;i<L->len;i++)
    {
        printf("%d ",L->arr[i]);
    }
    printf("\n");
    return 0;
}
//删除某一个数据  成功：0  失败：-1
int pos_delet_data_fromlist(DATA_TYPE data,sqlist *L)
{
    if(L->len==0)//空表
    {
        printf("list is null\n");
        return -1;
    }
    int i;
    for(i=0;i<L->len;i++)
    {
        if(data==L->arr[i])//找到该数据 
        {
            break;
        }
    }
    //如果没有找到数据 表示该数据不在表中  返回-1
    if(i==L->len)
    {
        printf("data is not find\n");
        return -1;
    }
    //
    for(;i<L->len-1;i++)
    {
        L->arr[i]=L->arr[i+1];
    }
    memset(&L->arr[L->len-1],0,sizeof(DATA_TYPE));//将表中的最后一个数据清0
    L->len--;

    return 0;

}